package sistema;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

import conta.ContaUserStories;

/**
 * Classe que salva no banco de dados.
 * 
 * @author Adalberto Teixeira
 * @author Andrey Menezes
 * @author Laise Florentino
 * @author Laio Francis
 * 
 */
public class manipuladorXML implements Manipulavel {
	private static manipuladorXML instanciaUnica = null;

	XStream xstream = new XStream(new DomDriver());

	/**
	 *Construtor de manipuladorXML
	 */
	protected manipuladorXML() {
	}

	/**
	 * Retorna a inst�ncia �nica Padrao Singleton
	 * 
	 * @return instanciaUnica
	 */
	public synchronized static Manipulavel getInstance() {
		if (instanciaUnica == null) {
			instanciaUnica = new manipuladorXML();
		}
		return instanciaUnica;
	}

	/**
	 * Converte de String para Objeto.
	 * 
	 * @param arquivo
	 * @return contas
	 * 
	 * @throws IOException
	 */
	@SuppressWarnings("unchecked")
	public ArrayList<ContaUserStories> carregarContas(String arquivo)
			throws IOException {
		String contasXML = carregar(arquivo);
		ArrayList<ContaUserStories> contas = (ArrayList<ContaUserStories>) xstream
				.fromXML(contasXML);

		return contas;
	}

	/**
	 * Converte um array de objetos para XML e salva no disco.
	 * 
	 * @param asContas
	 * 
	 * @throws IOException
	 */
	public void salvar(ArrayList<ContaUserStories> asContas) throws IOException {

		FileWriter arquivo = new FileWriter(new File("contas.xml"));
		xstream.toXML(asContas, arquivo);
		arquivo.close();
	}

	/**
	 * Retorna uma string contendo o XML.
	 * 
	 * @param arquivo
	 * @return String do XML.
	 * 
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	public String carregar(String arquivo) throws FileNotFoundException,
			IOException {

		File file = new File(arquivo);

		if (!file.exists()) {
			return "Ainda nao existem contas no sistema!!!";
		}

		BufferedReader br = new BufferedReader(new FileReader(arquivo));
		StringBuffer bufSaida = new StringBuffer();

		String linha;
		while ((linha = br.readLine()) != null) {
			bufSaida.append(linha + "\n");
		}

		br.close();
		return bufSaida.toString().trim();

	}
}